<!DOCTYPE html>
<html>

  <head>
	<meta charset="UTF-8">
	<title>Xtext - Xtext 2.17.0 Release Notes</title>
	
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<meta name="description"
		content="The website of Eclipse Xtext, an open-source framework for development of programming languages and domain-specific languages">
	<meta name="author" content="Sven Efftinge">
	<meta name="author" content="Miro Spoenemann">
	<!--  styles -->
	<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
	<!--[if lt IE 9]>
	  <script src="https://html5shim.googlecode.com/svn/trunk/html5.js"></script>
	<![endif]-->
	
	<!-- Le fav and touch icons -->
	<link rel="shortcut icon" href="/Xtext/images/favicon.png">
	
	<link href="/Xtext/css/bootstrap.css" rel="stylesheet" type='text/css'>
	<link href="/Xtext/css/bootstrap-responsive.css" rel="stylesheet" type='text/css'>
	<link href="/Xtext/css/shield-responsive.css" rel="stylesheet" type='text/css'>
	<link href='/Xtext/css/fonts.css' rel='stylesheet' type='text/css'>
	<link href="/Xtext/css/prettyPhoto.css" rel="stylesheet" media="screen" type='text/css'>
	<link href="/Xtext/css/prettify.css" type="text/css" rel="stylesheet"/>
	<link href="/Xtext/css/style.css" rel="stylesheet" type='text/css'>
	<!-- cover flow -->
	<link href="/Xtext/css/coverflow.css" rel="stylesheet" type='text/css'>
	<!--[if lt IE 9]>
	  <link href="/css/iebugs.css" rel="stylesheet" type='text/css'>
	<![endif]-->

	<!-- BEGIN Cookie Consent
	<link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.0.3/cookieconsent.min.css" />
	<script src="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.0.3/cookieconsent.min.js"></script>
	<script>
	window.addEventListener("load", function(){
	window.cookieconsent.initialise({
		"palette": {
		"popup": {
		  "background": "#000"
		},
		"button": {
		  "background": "#f1d600"
		}
		},
		"theme": "edgeless",
		"type": "opt-in",
		onInitialise: function (status) {
		  var type = this.options.type;
		  var didConsent = this.hasConsented();
		  if (type == 'opt-in' && didConsent) {
		    // TODO: enable cookies
		  }
		  if (type == 'opt-out' && !didConsent) {
		    // TODO: disable cookies
		  }
		},
		onStatusChange: function(status, chosenBefore) {
		  var type = this.options.type;
		  var didConsent = this.hasConsented();
		  if (type == 'opt-in' && didConsent) {
		    // TODO: enable cookies
		  }
		  if (type == 'opt-out' && !didConsent) {
		    // TODO: disable cookies
		  }
		}, 
		onRevokeChoice: function() {
		  var type = this.options.type;
		  if (type == 'opt-in') {
		    // TODO: disable cookies
		  }
		  if (type == 'opt-out') {
		    // TODO: enable cookies
		  }
		},
		"content": {
		"href": "https://www.eclipse.org/legal/privacy.php"
		}
	})});
	</script>
	END Cookie Consent -->
</head>


  <body>
  
    <header class="site-header">

  <!-- Navbar -->
  <div class="navbar navbar-fixed-top">
    <div class="navbar-inner">
      <div class="container">
        <a class="btn btn-navbar" data-toggle="collapse"
          data-target=".nav-collapse"> <span class="icon-bar"></span> <span
          class="icon-bar"></span> <span class="icon-bar"></span>
        </a> <a class="brand" href="/Xtext/index.html"></a>
        <div class="nav-collapse collapse" style="height: 0px;">
          <ul class="nav">
            <!--li ><a href="/Xtext/news.html">News</a></li-->
            <li ><a href="/Xtext/download.html">Download</a></li>
            <li ><a href="/Xtext/documentation/index.html">Documentation</a></li>
            <li ><a href="/Xtext/community.html">Community</a></li>
            <li class="dropdown">
              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Support &amp; Trainings<span class="caret"></span></a>
              <ul class="dropdown-menu">
                <li><a href="https://info.itemis.com/professional-xtext-support" target="_blank">itemis</a></li>
                <li><a href="https://www.typefox.io/language-engineering/" target="_blank">TypeFox</a></li>
              </ul>
            </li>
            <li ><a href="https://eclipse.dev/Xtext/xtend">Xtend</a></li>
          </ul>
          <!--div class="nav pull-right">
            <li ><a><iframe src="https://ghbtns.com/github-btn.html?user=eclipse&repo=xtext&type=star&count=true" frameborder="0" scrolling="0" width="170px" height="20px"></iframe></a></li>
          </div-->
        </div>
        <!--/.nav-collapse -->
      </div>
    </div>
  </div>
  <!-- Navbar End -->

</header>


    <div class="page-content">
  <div class="wrapper">
    <div id="page">  
    	<div class="inner">
    		<br/><br/>
    		<div id="maincontainer" class="container">
    			<div class="span8 offset1">
    				<h1>Xtext 2.17.0 Release Notes</h1>
    				<h4>Mar 5, 2019</h4>
    				<br/>
    				<p>This release focuses on the compatibility with Java 11 &amp; Eclipse 2019-03, stability, performance and technical debt reduction.</p>

<h2 id="bom">BOM</h2>

<p>Xtext 2.17 introduces a new artifact, a <a href="https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Importing_Dependencies">Maven BOM (<em>bill of materials</em>)</a>. Basically it is an artifact with packaging type <code>pom</code>, which defines dependencies by a <code>&lt;dependencyManagement&gt;</code> section. A BOM is consumed by client projects also by <code>&lt;dependencyManagement&gt;</code> and using the BOM artifact with scope <code>import</code> there.</p>

<p>The BOM declares all dependencies that are used by Xtext and has the coordinates</p>

<ul>
  <li><code>groupId</code> : <code>org.eclipse.xtext</code></li>
  <li><code>artifactId</code> : <code>xtext-dev-bom</code></li>
</ul>

<p>The <code>xtext-dev-bom</code> is used in Maven configurations as follows:</p>

<pre><code>	&lt;dependencyManagement&gt;
		&lt;dependencies&gt;
			&lt;dependency&gt;
				&lt;groupId&gt;org.eclipse.xtext&lt;/groupId&gt;
				&lt;artifactId&gt;xtext-dev-bom&lt;/artifactId&gt;
				&lt;version&gt;${xtext.version}&lt;/version&gt;
				&lt;type&gt;pom&lt;/type&gt;
				&lt;scope&gt;import&lt;/scope&gt;
			&lt;/dependency&gt;
		&lt;/dependencies&gt;
	&lt;/dependencyManagement&gt;
</code></pre>

<p>Any artifact declared by the BOM (e.g. Eclipse Core, EMF, MWE, Guava, LSP4J, JDT, ANTLR) can then be used without declaration of a version.</p>

<p>With Gradle 5 support of <a href="https://docs.gradle.org/5.0/userguide/managing_transitive_dependencies.html#sec:bom_import">BOM managed dependency versions</a> was introduced. The Xtext BOM can be consumed by Gradle projects with the <code>platform</code> dependency:</p>

<pre><code>	dependencies {
		compile platform("org.eclipse.xtext:xtext-dev-bom:${xtextVersion}")
	}
</code></pre>

<h2 id="java-11">Java 11</h2>

<p>Xtext and Xtend now fully support Java 11! With Xtext 2.16 it was already possible to run Xtext on a Java 11 VM, but it was not possible to use Java 11 also as the target Java version. Since this required Java 11 enabled versions of Eclipse JDT, Tycho and Gradle and not all were available and especially not tested with Xtext, we had to defer the full support to 2.17.</p>

<p>Now with that latest and greatest versions of JDT, Tycho and Gradle integrated, there are no restrictions to use Java 11 in any of the configurations.</p>

<h2 id="customizable-exception-handling-of-validation-code">Customizable Exception Handling of Validation Code</h2>

<p>By default Xtext swallows <code>NullPointerException</code> occuring during the execution of validators. While this behavior is desirable in most cases and users are not bothered with faulty validation or the likely case of NPEs caused by accessing unresolvable proxies, it may be desirable to report or rethrow these exceptions. To minimize the effort of customizing, the handling of exceptions is delegated to the new API method <code>AbstractDeclarativeValidator#handleExceptionDuringValidation(Throwable)</code>. Clients may overroide this method to change the exception handling behavior in their validator classes. (<a href="https://github.com/eclipse/xtext-core/issues/983">to issue</a>)</p>

<h2 id="guava-210-version-pinning">Guava 21.0 Version Pinning</h2>

<p>Xtext allowed a version range from 14.0 to 21.0 for the Guava library in the past. Effectively this range became invalid since API introduced with Guava 20.0 was used in Xbase. The open version range lead also to other surprises in the past.</p>

<p>With Xtext 2.17 it was decided to pin the required version of the Guava library to 21.0 only. This affects all bundle manifests for plugin builds as well as Gradle &amp; Maven builds through the introduced BOM (see above). Also the <em>New Project Wizard</em> will respect this restriction for newly created projects. (<a href="https://github.com/eclipse-xtext/xtext/issues/1391">to issue</a>)</p>

<h2 id="xtext-grammar-language">Xtext Grammar Language</h2>

<h3 id="new-validation-first-rule-must-not-be-a-fragment">New Validation: First Rule Must Not Be a Fragment</h3>

<p>An Xtext grammar’s first rule must not start with a fragment rule. This is now checked by an additional validation rule. (<a href="https://github.com/eclipse/xtext-core/pull/1041">to issue</a>)</p>

<p><img src="/Xtext/images/releasenotes/2_17_Xtext_First-rule-not-a-fragment.gif" alt="Validation: first rule not a fragment" height="50%" width="50%" /></p>

<h2 id="testing">Testing</h2>

<h3 id="hyperlinking">Hyperlinking</h3>

<p>A new base class <code>AbstractHyperlinkingTest</code> has been added to provide a convenient way to test hyperlinking navigation.</p>

<p>All standard example projects have been updated to provide a test class (<code>&lt;LangugageName&gt;HyperlinkingTest.java</code>) for demonstration. (<a href="https://github.com/eclipse/xtext-eclipse/issues/949">to issue</a>)</p>

<h3 id="junit-5-support">JUnit 5 Support</h3>

<p>The package <code>org.eclipse.xtext.testing.extensions</code> introduced with release 2.14 is now public API, thus users of Xtext JUnit 5 support will no longer receive restricted API usage warnings.</p>

<p>The <em>New Project Wizard</em> selects JUnit 5 as default.</p>

<p><img src="/Xtext/images/releasenotes/2_17_Xtext_JUnit5-default.png" alt="JUnit 5 support as default" height="50%" width="50%" /></p>

<h2 id="xtext-maven-plugin">xtext-maven-plugin</h2>

<h3 id="output-configuration-name">Output Configuration Name</h3>

<p>It is now possible to configure set the <code>name</code> attribute for non-default output configurations. (<a href="https://github.com/eclipse/xtext-maven/issues/62">to issue</a>)</p>

<h3 id="upgrade-to-maven-3-api">Upgrade to Maven 3 API</h3>

<p>The <code>xtext-maven-plugin</code> has been refactored to use the latest Maven 3 API. The most significant internal change is that all doclet based configurations have been changed to use Maven 3 annotation API.</p>

<h2 id="xtext-web">xtext-web</h2>

<p>The Xtext web support has been updated to the latest versions of the used libraries and editors. Particularly we upgraded to:</p>

<ul>
  <li>requirejs 2.3.6</li>
  <li>jquery 3.3.1-1</li>
  <li>ace 1.3.3</li>
  <li>codemirror 5.41.0</li>
  <li>Orion 17</li>
</ul>

<h2 id="upgrades">Upgrades</h2>

<p>Xtext builts on top of numerous technologies which frequently provide releases. An important task is therefore to keep up-to-date with the latest from the used technology stack. All upgrades affect Xtext in multiple ways:</p>

<ul>
  <li>All internal usages for building Xtext use the upgraded versions</li>
  <li>The <em>New Project Wizard</em> produces projects that make use of upgrades</li>
  <li>Our provided Oomph setup has been updated to reflect the latest changes</li>
</ul>

<h3 id="eclipse-2019-03">Eclipse 2019-03</h3>

<p>As member of the Eclipse Simultaneous Release Xtext is also built against the latest target platform 2019-03.</p>

<h3 id="gradle-521">Gradle 5.2.1</h3>

<p>We upgraded to Gradle 5.2.1. This version is used especially to support the introduced Maven BOM (see above) “natively” in Gradle configurations.</p>

<h3 id="tycho-130">Tycho 1.3.0</h3>

<p>Tycho 1.3.0 is required especially for full Java 11 support.</p>

<h3 id="mwe-210">MWE 2.10</h3>

<p>Xtext is now the latest release 2.10 of the Modeling Workflow Engine (MWE). The MWE project has been updated to use a recent Xtext version itself and supports now separate source folders for main sources and tests.</p>

<h3 id="eclipse-orbit">Eclipse Orbit</h3>

<p>Xtext uses the Orbit repository <a href="https://download.eclipse.org/releases/2019-03/">https://download.eclipse.org/releases/2019-03/</a> for third party libraries. The location redirects to the latest repository recommended for the simultanous release.</p>

<h2 id="credits">Credits</h2>

<p>The Xtext project is thankful for the dedication of each committer and contributor. This release has been made possible by the following persons (in order of the number of contributed commits to this release to <a href="https://github.com/eclipse/xtext#repositories">all repositories</a> except <a href="https://github.com/eclipse/xtext-xtend">xtext-xtend</a>):</p>

<ul>
  <li>Christian Dietrich (itemis)</li>
  <li>Karsten Thoms (itemis)</li>
  <li>Sebastian Zarnekow (itemis)</li>
  <li>Tamas Miklossy (itemis)</li>
  <li>Holger Schill (itemis)</li>
  <li>Arne Deutsch (itemis)</li>
  <li>Prajwal Gowda (itemis) <img src="https://img.shields.io/badge/-first%20time%20contributor-green.svg" alt="" /></li>
  <li>Anders Dahlberg (Ericsson) <img src="https://img.shields.io/badge/-first%20time%20contributor-green.svg" alt="" /></li>
  <li>Eva Poell (itemis) <img src="https://img.shields.io/badge/-first%20time%20contributor-green.svg" alt="" /></li>
  <li>Lorenzo Addazi <img src="https://img.shields.io/badge/-first%20time%20contributor-green.svg" alt="" /></li>
  <li>Jan Rosczak <img src="https://img.shields.io/badge/-first%20time%20contributor-green.svg" alt="" /></li>
  <li>Jelle Schuhmacher (Altran) <img src="https://img.shields.io/badge/-first%20time%20contributor-green.svg" alt="" /></li>
  <li>Titouan Vervack (Sigasi)</li>
  <li>Jonathan Menzies <img src="https://img.shields.io/badge/-first%20time%20contributor-green.svg" alt="" /></li>
  <li>Christian Schneider (TypeFox)</li>
</ul>

<h2 id="fixed-issues">Fixed Issues</h2>

<p>As in every release cycle we were eagerly hunting down bugs, and reviewed and integrated plenty of contributions. Almost 80 issues and 240 pull requests have made it into this release. For further details please refer to the following lists:</p>

<ul>
  <li>
    <p><a href="https://github.com/search?utf8=%E2%9C%93&amp;q=is%3Aissue+milestone%3ARelease_2.17+is%3Aclosed+repo%3Aeclipse%2Fxtext+repo%3Aeclipse%2Fxtext-core+repo%3Aeclipse%2Fxtext-lib+repo%3Aeclipse%2Fxtext-extras+repo%3Aeclipse%2Fxtext-eclipse+repo%3Aeclipse%2Fxtext-idea+repo%3Aeclipse%2Fxtext-web+repo%3Aeclipse%2Fxtext-maven+repo%3Aeclipse%2Fxtext-xtend&amp;type=Issues&amp;ref=searchresults">Fixed GitHub issues</a></p>
  </li>
  <li>
    <p><a href="https://github.com/search?utf8=%E2%9C%93&amp;q=is%3Apr+milestone%3ARelease_2.17+is%3Aclosed+repo%3Aeclipse%2Fxtext+repo%3Aeclipse%2Fxtext-core+repo%3Aeclipse%2Fxtext-lib+repo%3Aeclipse%2Fxtext-extras+repo%3Aeclipse%2Fxtext-eclipse+repo%3Aeclipse%2Fxtext-idea+repo%3Aeclipse%2Fxtext-web+repo%3Aeclipse%2Fxtext-maven+repo%3Aeclipse%2Fxtext-xtend&amp;type=Issues&amp;ref=searchresults">Closed Pull Requests</a></p>
  </li>
  <li>
    <p><a href="https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&amp;bug_status=VERIFIED&amp;bug_status=CLOSED&amp;classification=Modeling&amp;classification=Tools&amp;columnlist=product%2Ccomponent%2Cassigned_to%2Cbug_status%2Cresolution%2Cshort_desc%2Cchangeddate%2Ckeywords&amp;f0=OP&amp;f1=OP&amp;f3=CP&amp;f4=CP&amp;known_name=Xtext%202.17&amp;list_id=16618269&amp;product=TMF&amp;product=Xtend&amp;query_based_on=Xtext%202.17&amp;query_format=advanced&amp;status_whiteboard=v2.17&amp;status_whiteboard_type=allwordssubstr">Fixed Eclipse Bugzilla tickets</a></p>
  </li>
</ul>

    			</div>
    		</div>
      </div>
    </div>
  </div>
</div>
    
    <footer class="site-footer">
  <div id="extra">
    <div class="inner">
      <div class="container">
        <div class="row">
          <div class="span6">
            <h3 class="footer-links-header">Quick Links</h3>
            <ul class="footer-links clearfix">
              <li><a href="https://www.eclipse.org/legal/privacy.php">Privacy Policy</a></li>
              <li><a href="https://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></li>
              <li><a href="https://www.eclipse.org/legal/copyright.php">Copyright Agent</a></li>
              <li><a href="https://www.eclipse.org/legal/">Legal</a></li>
            </ul>
            <ul class="footer-links clearfix">
              <li><a href="https://www.eclipse.org">Eclipse Home</a></li>
              <li><a href="https://marketplace.eclipse.org/">Market Place</a></li>
              <li><a href="https://www.planeteclipse.org/">Eclipse Planet</a></li>
              <li><a href="https://www.eclipse.org/forums/index.php/f/27/">Xtext Forum</a></li>
            </ul>
            <br/><br/>
            Xtext is a trademark of the Eclipse Foundation, Inc. and is used with permission
            <br/><br/>
            <img src="/Xtext/images/eclipse-foundation-white-orange.svg" alt="Eclipse Foundation"/>
          </div>
          <div class="span6">
            <!-- Social Media Links -->
            <h3 class="footer-links-header">Social Media</h3>
            <ul class="footer-links clearfix">
              <li>
                <a href="https://twitter.com/xtext"><img src="/Xtext/images/Twitter-bird-darkgray.png" class="img-responsive" style="margin-right: 5px;height: 1em;" alt="Twitter icon">@xtext on Twitter</a>
              </li>
            </ul>
          </div>
        </div>
      </div>
    </div>
  </div>
  <a href="#" class="scrollup fadeOutRight animated" style="display: none;">ScrollUp</a>
  <!-- Le javascript
      ================================================== -->
  <!-- Placed at the end of the document so the pages load faster -->
  
  <script src="/Xtext/js/jquery-1.11.3.min.js"></script>
  <script src="/Xtext/js/bootstrap.min.js"></script>
  <script src="/Xtext/js/jquery.easing.1.3.js" type="text/javascript"></script>
  <script src="/Xtext/js/jquery.prettyPhoto.js" type="text/javascript"></script>
  <script src="/Xtext/js/prettify.js" type="text/javascript"></script>
  <script src="/Xtext/js/lang-xtend.js" type="text/javascript"></script>
  <script src="/Xtext/js/lang-common.js" type="text/javascript"></script>
  <script src="/Xtext/js/custom.js" type="text/javascript"></script>
  <!--script src="https://apis.google.com/js/platform.js" async defer></script-->
  <!--script type="text/javascript">
    var _gaq = _gaq || [];  
      _gaq.push([ '_setAccount', 'UA-2429174-3' ]);
    _gaq.push([ '_trackPageview' ]);
    (function() {
      var ga = document.createElement('script');
      ga.type = 'text/javascript';
      ga.async = true;
      ga.src = ('https:' == document.location.protocol ? 'https://ssl'
          : 'https://www')
          + '.google-analytics.com/ga.js';
      var s = document.getElementsByTagName('script')[0];
      s.parentNode.insertBefore(ga, s);
    })();
  </script-->
  <script src="/Xtext/js/coverflow.min.js" type="text/javascript"></script>
  <script>
      $(function() {
        $('#coverflow').coverflow({
          active : 1,
          visibleAside: 2,
          overlap : 0.5,
          scale : 0.9,
          angle : 20,
          trigger : {
            "itemfocus" : true,
            "swipe" : true,
            "mousewheel" : false
          }
        });
        $('#coverflow :hidden').toggle();
        $(window).resize(function() {
          $('#coverflow').coverflow();
        });
      });

  </script>
</footer>


  </body>

</html>
